<?php

namespace app\common\lib;

use ReflectionClass;

class ClassArr
{
    // 用户返回各个sms类库
    public static function smsClassStat()
    {
        return [
            'ali' => "app\common\lib\sms\AliSms",
            'baidu' => "app\common\lib\sms\BaiDuSms",
            'jd' => "app\common\lib\sms\JdSms",
        ];
    }

    // 用于返回数据的对象或者类库
    public static function initClass($type, $classs, $param = [], $needInstance = false)
    {
        // 如果我们工厂模式调用的方法是静态的，那么我们返回类库即可 AliSms
        // 如果不是静态的就返回对象

        // 首先判断是否存在这个$type这个键值
        if (!array_key_exists($type, $classs)) {
            # code...
            return false;
        }

        $className = $classs[$type];

        /**
         * 如果需要实例化则要考反射机制来做
         * new ReflectionClass('A') => 建立A反射类
         * 若是要实例化则要调用
         * ->newInstanceArgs($args) => 相当于实例化A对象
         * */
        return $needInstance == true ? (new \ReflectionClass($className))->newInstance($param) : $className;
    }
}
